package com.bbcare.followup.plat.task;

import org.apache.commons.lang.StringUtils;

import java.math.BigInteger;
import java.util.Comparator;
import java.util.HashMap;

/**
 * 随访任务排序比较器，区别计划随访和临时随访。
 */
public class TaskComparatorDesc implements Comparator<Object> {
    @Override
    public int compare(Object obj1, Object obj2) {
        if (!(obj1 instanceof HashMap) || !(obj2 instanceof HashMap))   {
            return -1;
        }
        HashMap<String,Object> task1   = (HashMap<String,Object>)obj1;
        HashMap<String,Object> task2   = (HashMap<String,Object>)obj2;
        final String tempTask1  = task1.get("tempTask").toString();
        final String tempTask2  = task2.get("tempTask").toString();

        int seqNo1=0,seqNo2=0;
        Object seqNo1Obj    = task1.get("seqNo");
        Object seqNo2Obj    = task2.get("seqNo");
        if (seqNo1Obj instanceof BigInteger)    {
            seqNo1  = ((BigInteger)seqNo1Obj).intValue();
        } else if (seqNo1Obj instanceof Integer) {
            seqNo1  = ((Integer)seqNo1Obj).intValue();
        }
        if (seqNo2Obj instanceof BigInteger)    {
            seqNo2  = ((BigInteger)seqNo2Obj).intValue();
        } else if (seqNo2Obj instanceof Integer) {
            seqNo2  = ((Integer)seqNo2Obj).intValue();
        }
        if (0 == seqNo1)    {
            return 1;
        }
        if (0 == seqNo2)    {
            return -1;
        }
        final String planDate1   = task1.get("executeTime").toString();
        final String planDate2   = task2.get("executeTime").toString();
        if (!StringUtils.isEmpty(tempTask1) && !StringUtils.isEmpty(tempTask2) && tempTask1.equals("1") && tempTask2.equals("1") ) {
            //2个都是临时随访，比较计划随访日期。
            if (planDate1.equals(planDate2))    {
                //2个临时随访的计划随访日期相等，则比较它们的实际随访日期。
                final Object fdObj1 = task1.get("finishDate");
                final Object fdObj2 = task2.get("finishDate");
                if (null != fdObj1 && null != fdObj2)   {
                    return fdObj2.toString().compareTo(fdObj1.toString());
                } else {
                    return 0;
                }
            } else {
                return planDate2.compareTo(planDate1);
            }
        } else if (StringUtils.isEmpty(tempTask1) && StringUtils.isEmpty(tempTask2))    {
            //2个都不是临时随访。
            if (seqNo1<seqNo2)  {
                return 1;
            } else {
                return -1;
            }
        } else if (tempTask1.equals("1") && StringUtils.isEmpty(tempTask2))    {
            //1是临时随访，2是计划随访。
            return planDate2.compareTo(planDate1);
        } else if (StringUtils.isEmpty(tempTask1) && tempTask2.equals("1") ) {
            //1是计划随访，2是临时随访。
            return planDate2.compareTo(planDate1);
        }

        return 1;
    }
}
